Skip to content

Add Gemini scanner service for vinyl record metadata extraction#213

Draft
jakebromberg wants to merge 2 commits intomainfrom
feature/scanner-gemini-integration
Draft

Add Gemini scanner service for vinyl record metadata extraction#213
jakebromberg wants to merge 2 commits intomainfrom
feature/scanner-gemini-integration

Conversation

@jakebromberg
Copy link
Member

Summary

  • Add scanner endpoints for single-scan vinyl record metadata extraction via Google Gemini Vision API
  • Add UPC barcode lookup endpoint using existing Discogs service
  • Implement POST /library/scan (multipart image upload, synchronous Gemini extraction)
  • Implement POST /library/scan/upc-lookup (Discogs barcode search)
  • Follow existing singleton pattern from parser.service.ts for Gemini client
  • New dependencies: @google/generative-ai, multer

New Files

  • apps/backend/services/scanner/ — Gemini service, prompts, processor, types
  • apps/backend/controllers/scanner.controller.ts — Request handlers
  • apps/backend/routes/scanner.route.ts — Route definitions with multer middleware

Modified Files

  • apps/backend/app.ts — Register scanner routes
  • apps/backend/services/discogs/discogs.service.ts — Add searchByBarcode() method
  • apps/backend/services/requestLine/types.ts — Add barcode and type fields to DiscogsSearchRequest

Test Plan

  • Unit tests for Gemini service (mocked API responses) — 11 tests
  • Unit tests for processor orchestration — 8 tests
  • Manual test with sample vinyl record image
  • Verify multer file size limits work correctly

Jake Bromberg added 2 commits February 28, 2026 11:06
Implement POST /library/scan endpoint that accepts multipart image
uploads and extracts metadata (label name, catalog number, UPC,
DJ review text) via Google Gemini Flash vision API. Each extracted
field includes a confidence score.

Add POST /library/scan/upc-lookup endpoint for Discogs barcode search.

New scanner service follows singleton pattern from parser.service.ts.
Multer middleware handles in-memory image buffering with 10MB limit.
@jakebromberg jakebromberg force-pushed the feature/scanner-gemini-integration branch from a6a1586 to 9abc6c8 Compare February 28, 2026 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant